package exam;

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Example3_GetNumSum {



    /**
     * 制作一个字符串数组，每个元素都有一些随意输入的数字和字母组成
     * 要求找出里面每个数字，然后求出他们的和
     * 比如{"adf1f23","ju34ui21"}
     *  第一个元素的数字是123，第二个数字是3421 他们的和是 3421+123 =3544
     */

    public void getSum(int n){

        //把找数字的正则表达式编译成正则表达式对象 pattern
        Pattern pattern = Pattern.compile("\\d+");
        //初始化一个匹配器
        Matcher matcher;

        //初始化一个放字符串的集合
        List<String> list_num = new ArrayList<>();

        //初始化所有数字的和
        int sum = 0;

        //根据参数添加 n 个元素
        for (int i = 0; i < n; i++) {
            list_num.add(getRandomStr());
        }

        System.out.println(list_num);

        //遍历每个字符串，找出每个字符串中的数字
        for (String str : list_num) {

            //对数组中的每个元素初始化一个StringBuffer，用来存储此元素中的所有数字
            StringBuffer sb = new StringBuffer();

            //使用匹配器对每个字符串进行匹配
            matcher = pattern.matcher(str);

            while (matcher.find()) {
                //把当前元素中的所有数字都添加到这个StringBuffer中
                sb.append(matcher.group());
            }

            System.out.println("str:"+str);
            System.out.println("num:"+Integer.parseInt(sb.toString()));

            //把字符串转成数字，再求和
            sum += Integer.parseInt(sb.toString());
        }

        System.out.println("sum:"+sum);

    }

    public String getRandomStr(){

        Random rand = new Random();
        StringBuffer sb = new StringBuffer();

        int length = rand.nextInt(6)+5;
        int lengthHalf = rand.nextInt(length/2)+1;


        //生成的字符串是 5-10 个字符的字符串
        for (int j = 1; j <= 2; j++) {
            //循环的是字符
            for (int k = 0; k < lengthHalf; k++) {
                char c = (char)(rand.nextInt(26)+97);
                sb.append(c);
            }
            //循环数字
            for (int k = 0; k < length/2-lengthHalf ; k++) {
                char num = (char)(rand.nextInt(10)+48);
                sb.append(num);
            }
        }

        return sb.toString();

    }

    public static void main(String[] args) {
        Example3_GetNumSum numSum = new Example3_GetNumSum();

        numSum.getSum(3);
    }


}
